<?php

declare(strict_types=1);

namespace app\admin\controller;

use app\admin\middleware\Auth;
use app\BaseController;
use app\common\model\Admin as AdminModel;
use app\common\model\Order\Order;
use app\common\model\Post\Comment;
use app\common\model\User\User;
use think\facade\View;
use think\captcha\facade\Captcha;

class Index extends BaseController
{
    protected $middleware = [
        // login,captcha不会走中间件
        Auth::class => ['except' => ['login', 'captcha']]
    ];

    public function index()
    {
        $nav_title = [
            'nav_title' => '后台首页',
            'title' => '后台首页'
        ];
        
        // 用户
        $UserCount = User::count('*');

        // 评论
        $CommentCount = Comment::count('*');

        // 订单
        $OrderCount = Order::count('*');

        // 
        $TotalCount = Order::sum('total');

        return View::fetch('',[
            'nav_title' => $nav_title,
            'UserCount' => $UserCount,
            'CommentCount' => $CommentCount,
            'OrderCount' => $OrderCount,
            'TotalCount' => $TotalCount
        ]);
    }

    // 登录
    public function login()
    {
        // 获取cookie
        $LoginAdmin = !empty(cookie('LoginAdmin')) ? cookie('LoginAdmin') : '';

        if (!empty($LoginAdmin)) {
            $AdminList = AdminModel::column('id,salt');

            // 存放管理员id
            $adminid = 0;

            foreach ($AdminList as $item) {
                $ID = md5($item['id'] . $item['salt']);

                if ($LoginAdmin == $ID) {
                    $adminid = $item['id'];
                }
            }

            $admin = AdminModel::find($adminid);

            if (!$admin) {
                cookie('LoginAdmin', null);
                $this->error('非法登录');
            }

            if ($admin['state'] != 1) {
                cookie('LoginAdmin', null);
                $this->error('该管理员被禁用，请重新登录');
            }

            $this->success('你已经登录成功了，无需重新登录',(String)url('admin/index/index'));
        }

        // 判断是否有POST请求
        if ($this->request->isPost()) {
            // 接收验证码
            $captcha = $this->request->param('captcha', '', 'trim');

            // 判断是否错误
            if (!captcha_check($captcha)) {
                $this->error('验证码错误，请重新输入');
            }

            // 接收用户名
            $username = $this->request->param('username', '', 'trim');

            // 接收密码
            $password = $this->request->param('password', '', 'trim');

            // 是否选中5天登录
            $AutoLogin = $this->request->param('autologin',0);

            // 查询管理员表是否存在这条数据
            $admin = AdminModel::where(['username' => $username])->find();

            if (!$admin) {
                $this->error('该管理员不存在');
            }

            // 获取该账号密码盐
            $salt = $admin['salt'];

            // 接收的密码跟密码盐拼接再进行加密
            $ParamPass = md5($password . $salt);

            // 判断密码是否一致
            if ($ParamPass != $admin['password']) {
                $this->error('密码错误，请重新输入');
            }

            // 判断该管理员是否被禁用
            if ($admin['state'] != 1) {
                $this->error('该管理员被禁用了，请重新选择');
            }

            // 用管理员的id跟密码盐进行加密
            $LoginAdmin = md5($admin['id'] . $admin['salt']);

            if($AutoLogin == 1)
            {
                // 设置cookie cookie五天后过期
                cookie('LoginAdmin', $LoginAdmin, 5 * 24 * 3600 + time());
            }else{
                // 设置cookie
                cookie('LoginAdmin', $LoginAdmin);
            }

            $this->success('登录成功', (string)url('admin/index/index'));
        }

        // login页面暂停使用模板布局
        View::config(['layout_on' => false]);
        return View::fetch();
    }

    // 退出功能
    public function logout()
    {
        cookie('LoginAdmin',null);
        $this->success('退出成功',(String)url('admin/index/login'));
    }

    // 验证码
    public function captcha()
    {
        return Captcha::create('vercode');
    }
}
